/*
# Copyright (c) 2024 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
*/

#ifndef OHOS_VIDEO_BUFFER_H_
#define OHOS_VIDEO_BUFFER_H_


#include "api/scoped_refptr.h"
#include "api/video/video_frame_buffer.h"
#include <GLES3/gl31.h>

namespace webrtc {

enum OhosBufferType {
  OES,
  RGB,
  YUV,
};

class OhosVideoBuffer: public VideoFrameBuffer {
public:
    struct TextureBuffer{
        GLuint textureID;
        OhosBufferType type;
        float matrix[16];
        int yuvTexture[3];
    };
    
    static rtc::scoped_refptr<OhosVideoBuffer> Create(int width,
                                                int height,
                                                TextureBuffer textureBuffer);

    rtc::scoped_refptr<VideoFrameBuffer> CropAndScale(int crop_x,
                                            int crop_y,
                                            int crop_width,
                                            int crop_height,
                                            int scale_width,
                                            int scale_height);

    TextureBuffer GetVideoFrameBuffer() const;
    int width() const override;
    int height() const override;

    ~OhosVideoBuffer() override;
protected:
    OhosVideoBuffer(int width, int height, TextureBuffer textureBuffer);
private:
    Type type() const override;

    rtc::scoped_refptr<I420BufferInterface> ToI420() override;

    const int width_;
    const int height_;

    const TextureBuffer textureBuffer_;
};

}   // namespace webrtc

#endif //OHOS_VIDEO_BUFFER_H_
